#!/usr/bin/env python3
"""
脚本名称：ch27_exe.py
功能描述： 演示Python 文件与io中的json各个场景操作
作者：Gavin
创建日期：2022-05-06
版本：1.0
依赖库：无
使用方法： python ch27_exe.py
"""

import json


# 1. 序列化，将 Python 对象转为 JSON 字符串
def obj_2_json_str():
    print("序列化，将 Python 对象转为 JSON 字符串")
    data = {"name": "Alice", "age": 30, "hobbies": ["coding", "reading"]}
    json_str = json.dumps(data)
    print(json_str)  # {"name": "Alice", "age": 30, "hobbies": ["coding", "reading"]}


# 1.1 序列化，将 Python 对象转为 写入json文件
def obj_2_json_file():
    print("序列化，将 Python 对象转为 写入json文件")
    data = {"name": "Alice", "age": 30, "hobbies": ["coding", "reading"]}
    with open("data.json", "w") as f:
        json.dump(data, f)


# 2. 反序列化，将 Python 对象转为 JSON 字符串
def json_str_2_obj():
    print("反序列化，将 Python 对象转为 JSON 字符串")
    # 注意key 为双引号，外部为单引号
    json_str = '{"name": "Bob", "is_student": true, "scores": null}'
    data = json.loads(json_str)
    print(data)  # {'name': 'Bob', 'is_student': True, 'scores': None}


# 2. 反序列化，从 JSON 文件读取并转为 Python 对象
def json_file_2_obj():
    print("反序列化，从 JSON 文件读取并转为 Python 对象")
    with open("data.json", "r") as f:
        data = json.load(f)
        print(data)


obj_2_json_str()
obj_2_json_file()
json_str_2_obj()
json_file_2_obj()
